#!/usr/bin/python
# encoding: utf-8
# filename: artigoEmPeriodicos.py
#
#  scriptLattes V8
#  Copyright 2005-2012: Jesús P. Mena-Chalco e Roberto M. Cesar-Jr.
#  http://scriptlattes.sourceforge.net/
#
#
#  Este programa é um software livre; você pode redistribui-lo e/ou 
#  modifica-lo dentro dos termos da Licença Pública Geral GNU como 
#  publicada pela Fundação do Software Livre (FSF); na versão 2 da 
#  Licença, ou (na sua opinião) qualquer versão.
#
#  Este programa é distribuído na esperança que possa ser util, 
#  mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
#  MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
#  Licença Pública Geral GNU para maiores detalhes.
#
#  Você deve ter recebido uma cópia da Licença Pública Geral GNU
#  junto com este programa, se não, escreva para a Fundação do Software
#  Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#


import sys
import csv
import string
from scriptLattes import *
from geradorDePaginasWeb import *

class ArtigoEmPeriodico:
	item = None # dado bruto
	idMembro = None

	doi = None
	relevante = None
	autores = None
	titulo = None
	revista = None
	volume = None
	paginas = None
	numero = None
	ano = None
	resto = None
	chave = None
	estrato = None
	jcr = None

	def __init__(self, idMembro, partesDoItem='', doi='', relevante='', jcr=''):
		self.idMembro = set([])
		self.idMembro.add(idMembro)

		if not partesDoItem=='':
			
			#~ print partesDoItem
			#~ flag = raw_input("ESPERANDO...")
			
			# partesDoItem[0]: Numero (NAO USADO)
			# partesDoItem[1]: Descricao do artigo (DADO BRUTO)
			self.item = partesDoItem[1]
			self.doi = doi
			self.relevante = relevante
			self.jcr = jcr
			
			#~ print(">>> " + self.jcr)
			#~ flag = raw_input("ESPERANDO...")
			#~ print(self.jcr[0:4] + "-" + self.jcr[4:])
			
			# Dividir o item na suas partes constituintes
			partes = self.item.partition(" . ")
			self.autores = partes[0].strip()

			partes = partes[2].rpartition(", ")
			self.ano = partes[2].strip().rstrip(".")

			partes = partes[0].rpartition("p. ")
			if partes[1]=='': # se nao existe paginas
				self.paginas = ''
				partes = partes[2]
			else:
				self.paginas = partes[2].strip()
				partes = partes[0]
	
			partes = partes.rpartition(", n.")
			if partes[1]=='': # se nao existe numero
				self.numero = ''
				partes = partes[2]
			else:
				self.numero = partes[2].strip().rstrip(",")
				partes = partes[0]
	
			partes = partes.rpartition(", v. ")
			if partes[1]=='': # se nao existe volume
				self.volume = ''
				partes = partes[2]
			else:
				self.volume = partes[2].strip().rstrip(",")
				partes = partes[0]

			partes = partes.rpartition(". ")
			self.titulo = partes[0].strip()
			self.revista = partes[2].strip()

			self.chave = self.autores # chave de comparação entre os objetos

		else:
			self.doi = ''
			self.relevante = ''
			self.autores = ''
			self.titulo = ''
			self.revista = ''
			self.volume = ''
			self.paginas = ''
			self.numero = ''
			self.ano = ''
			self.estrato = ''

# -------------------------------------------------------------------- #
	def getEstrato(self, strJCR):
		webQualisDB = csv.reader(open(sys.argv[2], 'rb'), delimiter = ';')
		lista = list(list(linha) for linha in webQualisDB)
		
		for i in range(0, len(lista)):
			if lista[i][0].find(strJCR[0:4] + "-" + strJCR[4:]) >= 0:
				return lista[i][2]
				
		# Nao encontrou o periodico.
		return 'N/A'
# -------------------------------------------------------------------- #

	def compararCom(self, objeto):
		if self.idMembro.isdisjoint(objeto.idMembro) and compararCadeias(self.titulo, objeto.titulo):
			# Os IDs dos membros são agrupados. 
			# Essa parte é importante para a criação do GRAFO de colaborações
			self.idMembro.update(objeto.idMembro)

			if len(self.doi)<len(objeto.doi):
				self.doi = objeto.doi

			if len(self.autores)<len(objeto.autores):
				self.autores = objeto.autores

			if len(self.titulo)<len(objeto.titulo):
				self.titulo = objeto.titulo

			if len(self.revista)<len(objeto.revista):
				self.revista = objeto.revista

			if len(self.paginas)<len(objeto.paginas):
				self.paginas = objeto.paginas

			if len(self.volume)<len(objeto.volume):
				self.volume = objeto.volume

			if len(self.numero)<len(objeto.numero):
				self.numero = objeto.numero

			return self
		else: # nao similares
			return None



# caso difícil: falta melhorar a separacao entre TITULO e NOME-DE-REVISTA
#
#+AUTORES     : Jelinek, Herbert F. ; Cree, Michael J. ; Leandro, Jorge J. G. ; Soares, João V. B. ; Cesar, Roberto M. ; Luckie, A.
#+TITULO      : Automated segmentation of retinal blood vessels and identification of proliferative diabetic retinopathy. Journal of the Optical Society of America
#+REVISTA     : A, Optics Image Science and Vision
#+ANO         : 2007
#+PAGINAS     : 1448
#+NUMERO      :
#+VOLUME      : 24
#+item        : 
#
# Automated segmentation of retinal blood vessels and identification of
# proliferative diabetic retinopathy. Journal of the Optical Society of
# America. A, Optics Image Science and Vision

	def html(self, listaDeMembros):
		s = self.autores + '. <b>' + self.titulo + '</b>. ' + self.revista + '. '
		s+= 'v. ' + self.volume + ', '  if not self.volume==''  else ''
		s+= 'n. ' + self.numero + ', '  if not self.numero== '' else ''
		s+= 'p. ' + self.paginas + ', ' if not self.paginas=='' else ''
		s+= str(self.ano) + '.'         if str(self.ano).isdigit() else '.'

		if not self.doi=='':
			s+= ' <a href="'+self.doi+'" target="_blank" style="PADDING-RIGHT:4px;"><img border=0 src="doi.png"></a>' 

 		#~ print '>>> ', self.revista.encode('utf-8')
 		#~ parar = raw_input('PARADO...')
 		
 		self.estrato = self.getEstrato(self.jcr.encode('utf-8'))
		s+= menuHTMLdeBuscaPB(self.titulo, self.estrato)
		return s

		
	def ris(self):
		paginas = self.paginas.split('-')
		if len(paginas)<2:
			p1 = self.paginas
			p2 = ''
		else:
			p1 = paginas[0]
			p2 = paginas[1]
		s = '\n'
		s+= '\nTY  - JOUR'
		s+= '\nAU  - '+self.autores
		s+= '\nTI  - '+self.titulo
		s+= '\nJO  - '+self.revista
		s+= '\nVL  - '+self.volume
		s+= '\nIS  - '+self.numero
		s+= '\nSP  - '+p1
		s+= '\nEP  - '+p2
		s+= '\nPY  - '+str(self.ano)
		s+= '\nL2  - '+self.doi
		s+= '\nER  - '
		return s


	# ------------------------------------------------------------------------ #
	def __str__(self):
		s  = "\n[ARTIGO EM PERIODICO] \n"
		s += "+ID-MEMBRO   : " + str(self.idMembro) + "\n"
		s += "+RELEVANTE   : " + str(self.relevante) + "\n"
		s += "+DOI         : " + self.doi.encode('utf8','replace') + "\n"
		s += "+AUTORES     : " + self.autores.encode('utf8','replace') + "\n"
		s += "+TITULO      : " + self.titulo.encode('utf8','replace') + "\n"
		s += "+REVISTA     : " + self.revista.encode('utf8','replace') + "\n"
		s += "+PAGINAS     : " + self.paginas.encode('utf8','replace') + "\n"
		s += "+VOLUME      : " + self.volume.encode('utf8','replace') + "\n"
		s += "+NUMERO      : " + self.numero.encode('utf8','replace') + "\n"
		s += "+ANO         : " + str(self.ano) + "\n"
		s += "+item        : " + self.item.encode('utf8','replace') + "\n"
		return s
